//package com.ruoyi.common.utils;
//
//import com.ruoyi.common.constant.ClassesConstants;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.jdbc.core.JdbcTemplate;
//
//import java.sql.*;
//import java.util.*;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
//public class CustomJdbcTemplete {
//
//    private static final Logger LOGGER = LoggerFactory.getLogger(CustomJdbcTemplete.class);
//
//    /**
//     * 查询数据
//     * @param sql
//     * @param pstParams
//     * @return
//     */
//    public static List<Map<String, Object>> queryForList(String sql, List<String> pstParams){
//        List<Map<String, Object>> r = new ArrayList<>();
//        Map<String, Object> map = null;
//        Connection conn = null;
//        PreparedStatement pst = null;
//        ResultSet rs = null;
//        String completeSql = getCompleteSql(sql, pstParams);
//        try {
//            conn = DriverManager.getConnection(
//                    PropertiesUtil.getString("spring.datasource.druid.master.url"),
//                    PropertiesUtil.getString("spring.datasource.druid.master.username"),
//                    PropertiesUtil.getString("spring.datasource.druid.master.password")
//            );
//            //获取执行sql的对象
//            pst = conn.prepareStatement(sql);
//            for (int i = 0; i < pstParams.size(); i++) {
//                if(i < pstParams.size() - 2){
//                    pst.setObject(i+1, pstParams.get(i));
//                }else{
//                    //最后两个参数为分页  必须为int
//                    pst.setInt(i+1, Integer.parseInt(pstParams.get(i)));
//                }
//            }
//            //执行sql
//            rs = pst.executeQuery();
//            ResultSetMetaData data = rs.getMetaData();
//            while (rs.next()) {
//                map = new HashMap<String, Object>();
//                for (int i = 1; i <= data.getColumnCount(); i++) {
//                    //转化为驼峰命名
////                    String columnName = RenameUtils.UpperCaseFirstLetterLower(RenameUtils.UpperCase(data.getColumnLabel(i)));
//                    String columnName = data.getColumnLabel(i);
////                    String columnName = StringUtils.toCamelCase(data.getColumnLabel(i));
//                    if(rs.getObject(i) != null){
//                        map.put(columnName, String.valueOf(rs.getObject(i)));
//                    }
//                }
//                r.add(map);
//            }
//        }catch (Exception e){
//            LOGGER.error("查询数据失败[sql={}]:{}", completeSql, e.getMessage());
//        }finally {
//            release(rs, pst, conn);
//        }
//        return r;
//    }
//
//    public static boolean execute(String sql, List<String> pstParams){
//        boolean resultBool = false;
//        Connection conn = null;
//        PreparedStatement pst = null;
//        ResultSet rs = null;
//        String completeSql = getCompleteSql(sql, pstParams);
//        try {
//            conn = DriverManager.getConnection(
//                    PropertiesUtil.getString("spring.datasource.druid.master.url"),
//                    PropertiesUtil.getString("spring.datasource.druid.master.username"),
//                    PropertiesUtil.getString("spring.datasource.druid.master.password")
//            );
//            //获取执行sql的对象
//            pst = conn.prepareStatement(sql);
//            for (int i = 0; i < pstParams.size(); i++) {
//                pst.setObject(i+1, pstParams.get(i));
//            }
//            //执行sql
//            pst.execute();
//            resultBool = true;
//        }catch (Exception e){
//            LOGGER.error("执行语句失败[sql={}]:{}", completeSql, e.getMessage());
//        }finally {
//            release(rs, pst, conn);
//        }
//        return resultBool;
//    }
//
//    public static boolean executeBatchInsert(String sql, List<List<String>> batchInsertList){
//        boolean resultBool = false;
//        Connection conn = null;
//        PreparedStatement pst = null;
//        ResultSet rs = null;
//        try {
//            conn = DriverManager.getConnection(
//                    PropertiesUtil.getString("spring.datasource.druid.master.url"),
//                    PropertiesUtil.getString("spring.datasource.druid.master.username"),
//                    PropertiesUtil.getString("spring.datasource.druid.master.password")
//            );
//            // 设置不允许自动提交数据
//            conn.setAutoCommit(false);
//            //获取执行sql的对象
//            pst = conn.prepareStatement(sql);
//            for (int i = 0; i < batchInsertList.size(); i++) {
//                List<String> list = batchInsertList.get(i);
//                for (int j = 0; j < list.size(); j++) {
//                    pst.setObject(j+1, list.get(j));
//                }
//                pst.addBatch();
//                if(i % ClassesConstants.INSERT_NUMBER_EVERT_TIME == 0) {
//                    pst.executeBatch();
//                    pst.clearBatch();
//                }
//            }
//            conn.commit();
//            resultBool = true;
//        }catch (Exception e){
//            LOGGER.error("批量插入失败:{}", e.getMessage());
//        }finally {
//            release(rs, pst, conn);
//        }
//        return resultBool;
//    }
//
//    public static Long queryForCount(String sql, List<Object> pstParams){
//        Long count = 0L;
//        Connection conn = null;
//        PreparedStatement pst = null;
//        ResultSet rs = null;
//        String completeSql = getCompleteSql(sql, pstParams);
//        try {
//            conn = DriverManager.getConnection(
//                    PropertiesUtil.getString("spring.datasource.druid.master.url"),
//                    PropertiesUtil.getString("spring.datasource.druid.master.username"),
//                    PropertiesUtil.getString("spring.datasource.druid.master.password")
//            );
//            //获取执行sql的对象
//            pst = conn.prepareStatement(sql);
//            for (int i = 0; i < pstParams.size(); i++) {
//                pst.setObject(i+1, pstParams.get(i));
//            }
//            //执行sql
//            rs = pst.executeQuery();
//            if (rs.next()) {
//                count = rs.getLong(1);
//            }
//
//        }catch (Exception e){
//            LOGGER.error("查询数据条数失败[sql={}]:{}", completeSql, e.getMessage());
//        }finally {
//            release(rs, pst, conn);
//        }
//        return count;
//    }
//    //释放资源
//    public static void release(ResultSet rs, PreparedStatement pst, Connection conn){
//        try{
//            if(rs!=null){
//                rs.close();
//            }
//            if(pst!=null){
//                pst.close();
//            }
//            if(conn!=null){
//                conn.close();
//            }
//        }catch (Exception e){
//            LOGGER.error("close ResultSet failure", e);
//        }
//    }
//
//    private static String getCompleteSql(String sql, List<Object> pstParams){
//        String sqlTemp = "";
//        try{
//            sqlTemp = sql.replace("?", "%s");
//            sqlTemp = String.format(sqlTemp, pstParams.toArray(new String[]{}));
//            LOGGER.info("执行语句:{}", sqlTemp);
//        }catch (Exception e){
//            sqlTemp = sql;
//            LOGGER.error("获取完整sql语句失败");
//        }
//        return sqlTemp;
//    }
//}
